package com.tsk.example.api.model;

import lombok.Getter;
import lombok.ToString;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.List;

/**
 * @author: 黄嘉振
 * @create: 2023/3/8 14:03
 * @description:    用于接收请求参数的实体，需标注字段的含义，在此示例中，作为列表查询的条件字段接口实体
 *                  自行实现对前端请求过来的参数进行校验，如现有的校验注解不能满足时，自行实现即可
 *                  对于某种比较复杂的条件，比如这样的场景：field1 和 field2,两者必须要有一个值存在
 *                      即 要么 field1 有值 field2 无值， 要么 field1 无值 要么 field2 有值，
 *                      要么 field1 field2 都有值，只有这三种场景是合法的，那在参数校验中应该怎么写？
 *                  对于上面的场景，应该关注它与接收实体的职责，这里其实是存在分离点的，即
 *                  field1 和 field2 的合法场景校验，这种应该归属于业务逻辑，而不是参数校验逻辑，
 *                  校验 field1 和 field2 的动作应该放在服务层，而非控制层
 *                  参数接收层更多的对请求字段的硬性要求的把控，即接口的参数，必须满足什么条件才能进来，否则免谈；
 **/
@Getter
@ToString
public class DemoTableParamsVO {
    /**
     * 示例字段1列表，模拟级联查询
     */
    private List<List<String>> field1s;

    /**
     * 示例字段2，模拟模糊查询
     */
    private String field2;

    /**
     *  示例字段3，模拟分组查询
     */
    private String field3;

    /**
     *  示例字段4
     */
    private String field4;

    /**
     *  页数
     */
    @Min(value = 1, message = "查看页数必须大于等于1！")
    private Integer page;

    /**
     *  每页条数
     */
    @Min(value = 1, message = "每页条数不能小于1!")
    @Max(value = 100, message = "每页条数不能大于100！")
    private Integer limit;
}
